<?
/**
 * Clase encargada de mantener el Login del usuario.
 */
class Login{
	
	/**
	 * Identificador del usuario
	 * @var string
	 */
	private $user = NULL;
	
	/**
	 * Constructor de la clase.
	 * En caso de fallo en el login, retorna NULL.
	 *
	 * @param string $user Usuario
	 * @param string $pass Contraseña
	 */
	public function __construct($user=null, $pass=null){

		if($_SESSION['login']){
			$Login = unserialize($_SESSION['login']);
			$this->user = $Login->get_User();
		}
		else{
                    $this->login($user, $pass);
		}
		if(!$this->user);
			return NULL;
	}
	
	
	public function init(){
		try{
			
		}catch(Exception $e){
			header("Location: http://".SERVER_NAME.APP_DIR."/html/zonas/login/logout.php");
		}
	}
	
	public function get_User(){
		return $this->user;
	}
	
	public function get_Usuario(){
		return new Usuario($this->user);
	}
	/**
	 * Método que comprueba si el usuario y la contraseña son válidos.
	 *
	 * @param string $user
	 * @param string $pass
	 */
        /*INSERT INTO `myliedlocal`.`usuarios` (
`id` ,
`password` ,
`nombre` ,
`es_admin`
)
VALUES (
'joseiogr', '1a85060d7e6e2d037eceacc619364678', 'José Ignacio', '1'*/
	private function login($user, $pass){
		$MySQL = new MySQL();
		$Validar = new Validar();
		
		if($Validar->cadena($user) && $pass && $Validar->passwd($pass)){
			
			$epass = PAux::encode($pass);
			
			//Se obtiene el id del centro:
			$query = "SELECT password
						FROM usuarios 
						WHERE id='$user' AND password='$epass'; ";

			$res_login = $MySQL->query($query);

			//Se comprueba el resultado
			if(mysql_num_rows($res_login) != 1){
				throw new Exception("Los datos introducidos no son correctos.");
			}else{
				$row_centro = mysql_fetch_array($res_login);
				
				$this->user = $user;
				
				//$this->init();
			}
		}else{
			throw new Exception("Los datos introducidos no son correctos.");
		}
	}
	
	private function _login($user, $pass){
		
		$MySQL = new MySQL();
		$Validar = new Validar();
		
		if($Validar->cadena($user) && $pass){// && $Validar->passwd($pass)){
			$servidorLdap = LDAP_SERVER;
			$baseDN = BASEDN;
			//Conectamos con el servidor LDAP	
			
			// La secuencia básica para trabajar con LDAP es conectar, autenticar,
			// buscar, interpretar el resultado de la búsqueda y cerrar la conexión.
			
			// Conexión base de datos.
			// si no se puede conectar a la BD salimos del script con error 
			if(!$ds=ldap_connect($servidorLdap))
				throw new Exception("Error Conexi&oacute;n LDAP");
		
			//Conexi&oacute;n establecida, logamos al usuario
			
			//Construimos el login para LDAP:
			$login = stripslashes($user);
			$relogin="uid=".$login.", ".$baseDN;
			
			//Autentificando
			if( !@ldap_bind($ds, $relogin, $pass) ){
				// Usuario no encontrado:
				unset($login);
				unset ($relogin);
				throw new Exception("Error Autenticaci&oacute;n LDAP");				
			}
			
			// En este punto, el usuario ya esta validado
			
			//Obtenemos la informaci&oacute;n del usuario del servidor LDAP
			$info=ldap_search ($ds,$baseDN,"uid=$login");
			$info=ldap_get_entries($ds,$info);
			
			$this->user=$login;
			$nombre = $info[0]['cn'][0];;
			$usuario=new Usuario($login);
			
			// Si no poseemos datos del operador lo guardamos en la BD
			if (!$usuario->get_Id()){
				$datos['id_usuario'] = $login;				
				$datos['nombre'] = $nombre;
				
				$usuario->crear($datos);
			}			
			// Si sí poseemos datos del operador, actualizamos su CN
			else
				$result=$usuario->set_Nombre($nombre);			
				
			//Cerramos las conexiones...
			ldap_close($ds);
			closelog();
		
			//Borramos las variables 
			unset($login);
			unset ($relogin);
			
		}else{
			throw new Exception("Los datos introducidos no son correctos.");
		}
	}
}
?>
